<?php
class PhotosController extends Controller
{
	public $fic = false;

	/**
	*		LES VUES
	*/	
	function viewTag($idTag)
	{
		$this->loadModel('Tag_photo');
		$condition = array('idTag' => $idTag);
		$lesIdPhoto = $this->Tag_photo->find(array(
			'conditions'	=>	$condition
		));
		if(empty($lesIdPhoto)){
			$this->e404('Page introuvable');
		} else {

			// Récupération des photos à afficher
			$this->loadModel('Photo');
			$lesPhotos = array();
			foreach($lesIdPhoto as $k=>$v){
				$lesPhotos[] = $this->Photo->getPhoto($v->idPhoto);
			}		
			
			// Récupération du tag sélectionné
			$this->loadModel('Tag');
			$condition = array('idTag' => $idTag);
			$leTag = $this->Tag->findFirst(array(
				'conditions'	=>	$condition
			));

			// Envoi de l'objet à la vue
			$d['lesPhotos'] = $lesPhotos;
			$d['leTag'] = $leTag;
			$this->set($d);
		}
	}
	
	// Fonction de recherche par mot
	function viewNomTag()
	{
		$data = $this->request->data;
		$tag = $data->inputTag;
		
		$this->loadModel('Tag');
		$condition = array('mot' => $tag);
		$res = $this->Tag->findFirst(array(
			'conditions'	=>	$condition
		));
		
		
		if(empty($idTag)){
			$this->e404('Ce mot-cl&eacute; n\'appartient &agrave; aucune photo');
		}
		else {	
			$idTag = $res->idTag;		
			$this->loadModel('Tag_photo');
			$condition = array('idTag' => $idTag);
			$lesIdPhoto = $this->Tag_photo->find(array(
				'conditions'	=>	$condition
			));
			if(empty($lesIdPhoto)){
				$this->e404('Page introuvable');
			} else {

				// Récupération des photos à afficher
				$this->loadModel('Photo');
				$lesPhotos = array();
				foreach($lesIdPhoto as $k=>$v){
					$lesPhotos[] = $this->Photo->getPhoto($v->idPhoto);
				}		
				
				// Récupération du tag sélectionné
				$this->loadModel('Tag');
				$condition = array('idTag' => $idTag);
				$leTag = $this->Tag->findFirst(array(
					'conditions'	=>	$condition
				));

				// Envoi de l'objet à la vue
				$d['lesPhotos'] = $lesPhotos;
				$d['leTag'] = $leTag;
				$this->set($d);
			}
		}
	}

	//Permet de modifier les paramètres d'une photo
	function edit($idPhoto){
		$this->loadModel('Photo');
		$condition = array('idPhoto' => $idPhoto);
		$d['photo'] = $this->Photo->findFirst(array(
			'conditions'	=>	$condition
		));

		if(empty($d['photo'])){
			$this->e404('Page introuvable');
		}
		// Fonction pour la pagination
		$d['total'] = $this->Photo->findCount($condition);

		// Envoi de l'objet à la vue
		$this->set($d);

	}

	// Permet de voir une photo
	function index($idPhoto = 1)
	{
		$this->loadModel('Photo');
		$condition = array('idPhoto' => $idPhoto);
		$d['photo'] = $this->Photo->findFirst(array(
			'conditions'	=>	$condition
		));

		// Affichage d'une page particulière si la photo n'existe pas
		if(empty($d['photo'])){
			$this->e404('Page introuvable');
		}

		// Vérification sur l'utilisateur connecté est le propriétaire de la photo
		$isProprio = '0';
		$idMembreCo = NULL;
		$idPhotographe = NULL;
		if(isset($_SESSION['id'])){
			$idMembreCo = $_SESSION['id'];
		}
		$idPhotographe = $this->getProprioPhoto($idPhoto);
		if($idMembreCo == $idPhotographe){
			$isProprio = '1';
		}

		// Récupération des commentaires
		$this->loadModel('Commentaire');
		$condition = array('idPhoto' => $idPhoto);
		$d['commentaires'] = $this->Commentaire->find(array(
			'conditions' => $condition,
			'order by' => 'dateComm ASC'
			));

		// Fonction pour la pagination
		$d['total'] = $this->Photo->findCount($condition);
		$d['isProprio'] = $isProprio;

		// Envoi de l'objet à la vue
		$this->set($d);

	}

	// Permet à un utilisateur d'ajouter une photo à ses albums --> view ajout.php
	function ajout(){
		$idMembre = $_SESSION['id'];
	
		$repertoireDestination = "img/imgusers/$idMembre/";
	    $nomDestination        = $_FILES["inputFile"]["name"];
	   
	    if (is_uploaded_file($_FILES["inputFile"]["tmp_name"])) {
	        if (rename($_FILES["inputFile"]["tmp_name"], $repertoireDestination.$nomDestination)) {
			    /*echo "<br>";
			    echo "<b>";
	            echo "Le fichier temporaire ".$_FILES["inputFile"]["tmp_name"].
	                 " a été déplacé vers ".$repertoireDestination.$nomDestination;*/
	        } else {
			   /* echo "<br>";
			    echo "<b>";
	            echo "Le déplacement du fichier temporaire a échoué".
	                 ", le fichier est déjà uploadé dans le dossier ".$repertoireDestination;*/
	       }         
	    } else {
		  /*  echo "</br>";
		    echo "<b>";
	        echo "Le fichier n'a pas été uploadé (trop gros ou inexistant) ";*/
	    }

	    // Enregistrement dans la base
		$fichier = $_FILES['inputFile']['name'];

		// Récupération du nom de l'image
		$nom = substr($fichier, 0, -4);

		// Récupération des albums de l'utilisateur
		$condition = array('idMembre'	=> $idMembre);
		$this->loadModel('Album');
		$listeAlbums = $this->Album->find(array(
				'conditions' 	=> $condition,
				'order by' 		=> 'dateCreation ASC'
			));
		
		$d['fichier'] = $fichier;
		$d['nom'] = $nom;
		$d['albums'] = $listeAlbums;
		$this->set($d);

	}

	// Fonction pour supprimer une photo
	function supprime($idPhoto){

		// Récupération des données 
		$idMembreCo = $_SESSION['id'];
		$urlPhoto = $this->getUrlPhoto($idPhoto);

		// Vérification si la personne connectée est bien l'auteur de la photo
		$idAlbum = $this->getIdAlbumPhoto($idPhoto);
		$idPhotographe = $this->getProprioPhoto($idPhoto);

		if($idMembreCo == $idPhotographe){
			$this->loadModel('Photo');
			$this->Photo->supprimePhoto($idPhoto);
			$this->loadModel('Tag_photo');
			$this->Tag_photo->supprimeAssociationTagPhoto($idPhoto);
		}

		$d['idAlbum'] = $idAlbum;
		$this->set($d);

		// Suppression de la photo sur le serveur
		unlink("img/imgusers/$idMembreCo/$idAlbum/$urlPhoto");

	}
	
	// Ajout d'une photo à un album
	function valideAjout(){		

		$idMembre = $_SESSION['id'];

		// Récupération des données 
		$data = $this->request->data;
		$nomExtension = $data->inputNomExt;
		$nom = $data->inputNom;
		$description = $data->inputDescription;
		$lesTags = $data->inputTags;
		$nomAlbum = $data->inputAlbum;

		$enLigne = 0;
		// Vérification pour la mise en ligne de l'image
		if(isset($_POST['inputEnLigne'])){
			$enLigne = 1;
		}

		$idAlbum = $this->getIdAlbum($_SESSION['id'], $nomAlbum);

		// Enregistrement de la photo dans la bdd
		$this->loadModel('Photo');
		$idPhotoAjoutee = $this->Photo->enregistrePhoto($nomExtension, $nom, $idAlbum, $description, $enLigne);

		$arrayTags = array();
		// Séparation des tags et enregistrement dans la base s'ils n'existent pas
		if(!empty($lesTags)){

			$arrayTags = explode(' ', $lesTags);
			foreach ($arrayTags as $key => $value) {

				// Création du tag dans la base s'il n'existe pas
				$this->loadModel('Tag');
				$idTag = $this->Tag->enregistreTag($value);
								
				//echo $idTag.' '.$idPhotoAjoutee;
		
				// Association des tags à la photo
				$this->loadModel('Tag_photo');
				$this->Tag_photo->associeTagPhoto($idTag, $idPhotoAjoutee);
			}
		}		
		else {

		}
		
		$d['idAlbum'] = $idAlbum;
		$this->set($d);


		// On déplace le fichier dans le bon dossier correspond à l'album sélectionné
		$repertoireDestination = "img/imgusers/$idMembre/";
	    $file = $repertoireDestination.$nomExtension;
		$newfile = $repertoireDestination.$idAlbum.'/'.$nomExtension;

		if (!copy($file, $newfile)) {
		 echo "La copie du fichier $file n'a pas réussi...\n";
		}
		else {
			unlink($file);
		}
	}

	// Enregistre les modifications apportées à une photo
	function valideModif(){
		// Récupération des données 
		$data = $this->request->data;
		$idPhoto = $data->inputId;
		$nom = $data->inputNom;
		$description = $data->inputDescription;
		$enLigne = 0;
		if(isset($_POST['inputEnLigne'])){
			$enLigne = 1;
		}

		$this->loadModel('Photo');
		$this->Photo->modifPhoto($idPhoto, $nom, $description, $enLigne);

	}

	function ajoutComm(){
		$data = $this->request->data;
		// Photo commentée
		$idPhoto = $data->idPhoto;
		// Membre qui a commenté la photo
		$idMembre = $_SESSION['id'];
		// Texte
		$texte = $data->taComm;

		$d['idPhoto'] = $idPhoto;

		// Ajout du commentaire
		$this->loadModel('Commentaire');
		$this->Commentaire->enregistreComm($idMembre, $idPhoto, $texte);

		$this->set($d);
	}


	/**
	* 		LES FONCTIONS
	*/

	// Permet de récupérer les dernières photos ajoutées pour l'affichage dans la page d'accueil
	function getPhotosAccueil()
	{
		$this->loadModel('Photo');
		$condition = array('enLigne' => 1);
		return $this->Photo->find(array(
			'conditions' => $condition,
			'limit' => 10,
			'order by' => 'dateMiseEnLigne DESC'				
		));
	}

	function getPhotographe($idMembre){
		$this->loadModel('User');
		$condition = array('idMembre' => $idMembre);
		$result = $this->User->findFirst(array('conditions' => $condition));
		return $result;
	}
	
	function getProprioPhoto($idPhoto){
		$this->loadModel('Photo');
		$condition = array('idPhoto' => $idPhoto);
		$result = $this->Photo->findFirst(array('conditions' => $condition));
		return $result->idMembre;
	}

	function getIdAlbumPhoto($idPhoto){
		$this->loadModel('Photo');
		$condition = array('idPhoto' => $idPhoto);
		$result = $this->Photo->findFirst(array('conditions' => $condition));
		return $result->idAlbum;
	}

	function getUrlPhoto($idPhoto){
		$this->loadModel('Photo');
		$condition = array('idPhoto' => $idPhoto);
		$result = $this->Photo->findFirst(array('conditions' => $condition));
		return $result->url;
	}
}
?>